<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
// 循环：

/* while
  while (布尔值表达式) {
    代码块
  }

  执行逻辑：若 布尔值表达式 返回值为「真」，就执行 代码块
*/

/* do ... while
  do {
    代码块
  } while (布尔值表达式)

  执行逻辑：先执行一次 代码块，再布尔值表达式判断，若为「真」就再次执行 代码块
*/

/* for 循环
  for (声明初始变量-1; 布尔值表达式判断初始变量-2; 改变初始变量-3) {
    代码块-4
  }
  执行顺序：1   243243243...
*/

/* 循环体（代码块）内的关键字：
  break：终止循环
  continue：跳出本次循环，即continue下面的代码，本次循环不会执行
 */
// --------------------------------------

// 函数：
  // 作用：任意时候（执行函数）  ->  函数名()
    //  都可调用/执行，我封装进 函数的 代码块

/* 声明函数：
  1.声明式 函数
  function 函数名(形参1, 形参2, ...)  {
    代码块
  }

  2.赋值式 函数
  var 函数名 = function (形参1, 形参2, ...) {
    代码块
  }
*/

/* 函数的参数：
  注：声明式 或 赋值式 关于 函数的参数的知识点是一样的。

  参数分为：形参 和 实参。
    what 形参：  函数定义(声明)的时候，小括号内的 变量，即为  形参。
    what 实参：  函数调用(执行)的时候，小括号内的 表达式的返回值，即为 实参。

  实参与形参的关系：
    函数执行的时候，实参会一一对应到形参的位置，将实参的值赋值给形参；
      所以，函数执行的时候，通过函数的执行 才能确定 此时，形参的值是什么。
*/

// 声明函数 add
// x y 叫 形参；
// 此时，不知道 x / y 的 数据类型 和 数据值
// 只有在函数形式的时候，形参的值才由对应位置的 实参的值 决定
function add(x, y) {
  console.log(x + y);
}

// 执行函数 add
// 10 和 9 叫 实参；
// 每个实参的位置，找到 与其同位置的 形参，将实参的值赋值给 形参。
// add(10, '9');

/* 解读下面的代码：
var sample = '***'; // 此 sample 为 全局作用域的 sample

function fireworks(sample) { // 此 sample 为 函数作用域 的 sample
  // 函数内外的 sample 虽然同名，但不是 同一个 内存 空间
  // 函数作用域的 sample 的值由 执行fireworks 时的实参决定。
  console.log('fire-' + sample);
}

fireworks('a');  ->  log 输出："fire-undefined"

*/


/* 作用域：
  现阶段的两种作用域：1）全局作用域  2）函数作用域
  两种作用域的从属关系：函数作用域 ”低于“/”从属“ 于 全局作用域

  作用域的作用：确定 变量的 指向关系（确定变量 指向的内存是哪里 / 确定变量的值是什么）

  作用域的变量寻找逻辑：
    假设：内部作用域 中有 sample 这个变量：
      1）先在本作用域中 寻找 是否有 sample 的声明 或 形参
      2）若没有，再外层/上层 作用域 寻找 sample 的声明 或 形参
      3）直到找到 全局作用域 还找不到 sample 的声明的话，就报错：sample is not defined
 */
</script>